﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Configuracion.Empresa
{
    public class dbo_Cat_Empresa_Certificado_FE
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Empresa_Certificado_FE(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Empresa_Certificado_FE(

            string Nombre, 
            byte[] CerFile,
            byte[] KeyFile,                                
            string Password
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Empresa_Certificado_FE
                             (
                                Id_Certificado_FE,
                                RFC,
                                Nombre,
                                CerFile,
                                KeyFile,                                
                                [Password],
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Empresa_Certificado_FE') = 0, 1, DMax('Id_Certificado_FE', 'dbo_Cat_Empresa_Certificado_FE') + 1),
                                '@@RFC',
                                '@@Nombre',
                                @CerFile,
                                @KeyFile,                                
                                '@@Password',                               
                                NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);

                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                Query = Query.Replace("@@Password", Password);
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                OleDbCommand command = new OleDbCommand(Query);
                command.Parameters.AddWithValue("@CerFile", CerFile);
                command.Parameters.AddWithValue("@KeyFile", KeyFile);

                return SrvDB.ExecuteQuery_Insert(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        public Respuesta Alta_FE(

            string Nombre,
            byte[] CerFile,
            byte[] KeyFile,
            string Password
        )
        {
            try
            {
                dbo_Cat_Empresa_Datos_Factura DatosF = new dbo_Cat_Empresa_Datos_Factura(_RFC, _Usuario);
                Respuesta a = DatosF.Update_Empresa_Datos_Factura_Alta_FE();

                if (a.Id != 1)
                {
                    return a;
                }
                else
                {
                    string Query = @"INSERT INTO dbo_Cat_Empresa_Certificado_FE
                             (
                                Id_Certificado_FE,
                                RFC,
                                Nombre,
                                CerFile,
                                KeyFile,                                
                                [Password],
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Empresa_Certificado_FE') = 0, 1, DMax('Id_Certificado_FE', 'dbo_Cat_Empresa_Certificado_FE') + 1),
                                '@@RFC',
                                '@@Nombre',
                                @CerFile,
                                @KeyFile,                                
                                '@@Password',                               
                                NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                    Query = Query.Replace("@@RFC", this._RFC);

                    Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                    Query = Query.Replace("@@Password", Password);
                    Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                    Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                    
                    OleDbCommand command = new OleDbCommand(Query);
                    command.Parameters.AddWithValue("@CerFile", CerFile);
                    command.Parameters.AddWithValue("@KeyFile", KeyFile);

                    Respuesta b = SrvDB.ExecuteQuery_Insert(command);
                    if (b.Id != 1)
                    {
                        DataTable ds_Cer = Get_Empresa_Certificado_FE_Por_Nombre(Nombre.Replace("'", "''"));
                        dbo_Cat_Empresa_Serie s = new dbo_Cat_Empresa_Serie(_RFC, _Usuario);
                        Respuesta c = s.Update_Empresa_Serie_Alta_FE(Int32.Parse(ds_Cer.Rows[0]["Id_Certificado_FE"].ToString()));

                        return c;
                    }
                    return b;
                }                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public Respuesta Nuevo_Certificado(

            string Nombre,
            byte[] CerFile,
            byte[] KeyFile,
            string Password
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Empresa_Certificado_FE
                            (
                            Id_Certificado_FE,
                            RFC,
                            Nombre,
                            CerFile,
                            KeyFile,                                
                            [Password],
                            Fecha_Alta,
                            Usuario_Alta,
                            Fecha_Mantto,
                            Usuario_Mantto
                            )
                            VALUES
                            (
                            IIF(DCount('*', 'dbo_Cat_Empresa_Certificado_FE') = 0, 1, DMax('Id_Certificado_FE', 'dbo_Cat_Empresa_Certificado_FE') + 1),
                            '@@RFC',
                            '@@Nombre',
                            @CerFile,
                            @KeyFile,                                
                            '@@Password',                               
                            NOW(),
                            '@@Usuario_Alta',
                            NOW(),
                            '@@Usuario_Mantto'
                            )";

                Query = Query.Replace("@@RFC", this._RFC);

                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                Query = Query.Replace("@@Password", Password);
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                OleDbCommand command = new OleDbCommand(Query);
                command.Parameters.AddWithValue("@CerFile", CerFile);
                command.Parameters.AddWithValue("@KeyFile", KeyFile);

                return SrvDB.ExecuteQuery_Insert(command);                    
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Empresa_Certificado_FE_Por_Id(
            object Id,
            string Nombre,
            byte[] CerFile,
            byte[] KeyFile,
            string Password
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Empresa_Certificado_FE SET
                                             
                                    Nombre = '@@Nombre',
                                    CerFile = @CerFile,
                                    KeyFile = @KeyFile,                                
                                    [Password] = '@@Password'

                                 WHERE Id_Certificado_FE = @@Id";

                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                Query = Query.Replace("@@Password", Password);
                Query = Query.Replace("@@Id", Id.ToString());

                OleDbCommand command = new OleDbCommand(Query);
                command.Parameters.AddWithValue("@CerFile", CerFile);
                command.Parameters.AddWithValue("@KeyFile", KeyFile);

                return SrvDB.ExecuteQuery_Update(command);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Empresa_Certificado_FE_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Empresa_Certificado_FE 
                                    WHERE Id_Certificado_FE = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Empresa_Certificado_FE_Por_Id(object Id)
        {

            string Query = "SELECT * FROM dbo_Cat_Empresa_Certificado_FE WHERE Id_Certificado_FE = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresa_Certificado_FE_Por_Nombre(string Nombre)
        {

            string Query = "SELECT * FROM dbo_Cat_Empresa_Certificado_FE WHERE Nombre = '@@Nombre' AND RFC = '@@RFC'";
            Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresa_Certificado_FEes()
        {
            string Query = "SELECT * FROM dbo_Cat_Empresa_Certificado_FE WHERE RFC = '@@RFC'";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
